<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body>
		<script>
			function Star(uname, age) {
				// 一般情况下，公共属性定义在构造函数里面
				this.uname = uname;
				this.age = age;
				// this.sing = function () {
				// 	console.log('vvaaee');
				// };
			}
			// 公共方法放到原型对象身上
			Star.prototype.sing = function () {
				console.log('vvaaee');
			};

			let vae = new Star('vae', 35);
			let uae = new Star('uae', 35);

			console.log(vae); // vae 对象上系统自动给添加一个 __proto__ 指向构造函数的原型对象 prototype，因此 vae 这个对象可以调用 sing 这个方法

			console.log(vae.__proto__ === Star.prototype);
			// 方法的查找规则：首先看 vae 这个对象是否有 sing 方法，如果有就执行
			// 如果没有，因为 vae 这个对象的原型 __proto__ 指向构造函数的对象原型 prototype，所以会再去构造函数的对象原型 prototype 身上去找 sing 这个方法
		</script>
	</body>
</html>
